import { Injectable } from '@angular/core';
// 导入 Angular 的 Injectable 装饰器，用于标记服务可以被 Angular 的依赖注入系统管理。

import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router';
// 从 @angular/router 导入与路由守卫相关的类型和接口。

import { Observable } from 'rxjs';
// 从 RxJS 导入 Observable 类型，用于创建 Observable 对象。

@Injectable({
  providedIn: 'root'
})
// 使用 @Injectable 装饰器定义一个可以在整个应用范围内被注入的服务。
export class AuthGuardService implements CanActivate {
  constructor(private router: Router) {}
  // 构造函数，通过依赖注入接收 Router 实例。

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot):
    Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
    // 实现 CanActivate 接口的 canActivate 方法，用于决定用户是否有权限访问特定的路由。

    const token = localStorage.getItem('token');
    // 从本地存储中获取 token。

    if (token) {
      // 如果 token 存在，则允许访问
      return true;
      // 返回 true 表示允许访问。
    } else {
      // 如果 token 不存在，则导航到登录页面
      return this.router.createUrlTree(['/login']);
      // 使用 router 的 createUrlTree 方法创建一个 URL 树，指向登录页面。
      // 返回 UrlTree 表示不允许访问，并将用户重定向到登录页面。
    }
  }
}
